SQL Injection
攻撃によってデータベースの不正利用をまねく可能性があるSQL文の組み立て方 発生しうる脅威
DBに蓄積された非公開情報の閲覧
個人情報の漏洩など
DBに蓄積された情報の改ざん、消去
ウェブページの改ざん、パスワード変更、システム停止など
認証回避による不正ログイン
システムの乗っ取り、他の攻撃の踏み台としての悪用
SQL文の組み立てにはplaceholderを使う
例えば、http requestのqueryの値をSQLに埋め込むときなど
where postId = ${postId}のようなものを書く時にplaceholderを使う
こっちの方が安全
プレースホルダのままSQL文をコンパイルしておき、データベースエンジン側で値を割り当てる方式
アプリケーション側のデータベース接続ライブラリ内で値をエスケープ処理してプレースホルダにはめ込む方式
例
こういう埋め込みをしたい時に
code:sql
SELECT * FROM users WHERE id = '$id'
'; DELETE FROM users --という文字列をそのまま埋め込むと
code:sql
SELECT * FROM users WHERE id = ''; DELETE FROM users --'
となり、文法的に正しいSQLができる
--はコメントmrsekut.icon
これはuserstableの全recordを削除する
参考
Also Me: Spend all day making memes
https://gyazo.com/0f9841e7f8bd6081e8db0f6fd6e37b09